Computing systems receive requests for tasks, for example requests for systems resources and memory requests, from users, and the requests represent multiple types of tasks having different levels of priority. In such systems, the low priority requests are often processed after all high priority requests. However, different requests can use a single key resource for multiple cycles. Therefore, a low priority request that is started when there are no high priority requests, can still delay a subsequent high priority request that utilizes a common resource.
Write traffic is one example of a low priority task that is received in memory systems. Write requests are often buffered until the read queue is empty. However, the write request may interfere with future read requests when it is scheduled. Another example of lower priority memory requests are prefetches, i.e. wherein subsequent instructions are loaded into a queue, as well as memory requests marked as low priority by the application or the operating system. Compressed memory systems are another example of memory systems with multiple types of requests. In a compressed memory system, memory reorganizations can occur as low priority tasks. However, they take many cycles to complete. Reorganizations may occur rarely and can be buffered.
Therefore, systems and methods are needed that can schedule a variety of tasks requests so that the execution of higher priority tasks is not inhibited by lower priority tasks.